home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / src.arc / LAPB.H < prev    next >
C/C++ Source or Header  |  1989-08-19  |  4KB  |  126 lines

  1. #ifndef    I
  2.  
  3. #include "global.h"
  4. #include "mbuf.h"
  5. #include "timer.h"
  6. #include "iface.h"
  7. #include "ax25.h"
  8.  
  9. /* Upper sub-layer (LAPB) definitions */
  10.  
  11. /* Control field templates */
  12. #define    I    0x00    /* Information frames */
  13. #define    S    0x01    /* Supervisory frames */
  14. #define    RR    0x01    /* Receiver ready */
  15. #define    RNR    0x05    /* Receiver not ready */
  16. #define    REJ    0x09    /* Reject */
  17. #define    U    0x03    /* Unnumbered frames */
  18. #define    SABM    0x2f    /* Set Asynchronous Balanced Mode */
  19. #define    DISC    0x43    /* Disconnect */
  20. #define    DM    0x0f    /* Disconnected mode */
  21. #define    UA    0x63    /* Unnumbered acknowledge */
  22. #define    FRMR    0x87    /* Frame reject */
  23. #define    UI    0x03    /* Unnumbered information */
  24. #define    PF    0x10    /* Poll/final bit */
  25.  
  26. #define    MMASK    7    /* Mask for modulo-8 sequence numbers */
  27.  
  28. /* FRMR reason bits */
  29. #define    W    1    /* Invalid control field */
  30. #define    X    2    /* Unallowed I-field */
  31. #define    Y    4    /* Too-long I-field */
  32. #define    Z    8    /* Invalid sequence number */
  33.  
  34. /* Per-connection link control block
  35.  * These are created and destroyed dynamically,
  36.  * and are indexed through a hash table.
  37.  * One exists for each logical AX.25 Level 2 connection
  38.  */
  39. struct ax25_cb {
  40.     struct ax25_cb *next;        /* Doubly linked list pointers */
  41.     struct ax25_cb *prev;
  42.  
  43.     struct iface *iface;        /* Interface */
  44.  
  45.     struct mbuf *txq;        /* Transmit queue */
  46.     struct mbuf *rxasm;        /* Receive reassembly buffer */
  47.     struct mbuf *rxq;        /* Receive queue */
  48.  
  49.     struct ax25_addr local;        /* Addresses */
  50.     struct ax25_addr remote;
  51.  
  52.     struct {
  53.         char rejsent;        /* REJ frame has been sent */
  54.         char remotebusy;    /* Remote sent RNR */
  55.         char rtt_run;        /* Round trip "timer" is running */
  56.         char retrans;        /* A retransmission has occurred */
  57.         char clone;        /* Server-type cb, will be cloned */
  58.     } flags;
  59.  
  60.     char reason;            /* Reason for connection closing */
  61. #define    LB_NORMAL    0        /* Normal close */
  62. #define    LB_DM        1        /* Received DM from other end */
  63. #define    LB_TIMEOUT    2        /* Excessive retries */
  64.  
  65.     char response;            /* Response owed to other end */
  66.     char vs;            /* Our send state variable */
  67.     char vr;            /* Our receive state variable */
  68.     char unack;            /* Number of unacked frames */
  69.     int maxframe;            /* Transmit flow control level */
  70.     int16 paclen;            /* Maximum outbound packet size */
  71.     int16 window;            /* Local flow control limit */
  72.     char proto;            /* Protocol version */
  73. #define    V1    1            /* AX.25 Version 1 */
  74. #define    V2    2            /* AX.25 Version 2 */
  75.     int16 pthresh;            /* Poll threshold */
  76.     unsigned retries;        /* Retry counter */
  77.     unsigned n2;            /* Retry limit */
  78.     int state;            /* Link state */
  79. #define    DISCONNECTED    0
  80. #define LISTEN        1
  81. #define    SETUP        2
  82. #define    DISCPENDING    3
  83. #define    CONNECTED    4
  84. #define    RECOVERY    5
  85.     struct timer t1;        /* Retry timer */
  86.     struct timer t3;        /* Keep-alive poll timer */
  87.     int32 rtt_time;            /* Stored clock values for RTT */
  88.     int rtt_seq;            /* Sequence number being timed */
  89.     int32 srt;            /* Smoothed round-trip time */
  90.  
  91.     void (*r_upcall) __ARGS((struct ax25_cb *,int));    /* Receiver upcall */
  92.     void (*t_upcall) __ARGS((struct ax25_cb *,int));    /* Transmit upcall */
  93.     void (*s_upcall) __ARGS((struct ax25_cb *,int,int));    /* State change upcall */
  94.  
  95.     int user;            /* User pointer */
  96.  
  97.     int segremain;            /* Segmenter state */
  98. };
  99. #define    NULLAX25    ((struct ax25_cb *)0)
  100. extern struct ax25_cb Ax25default,*Ax25_cb[];
  101. extern char *Ax25states[],*Axreasons[];
  102. extern int32 Axirtt,T3init;
  103. extern int16 N2,Maxframe,Paclen,Pthresh,Axwindow,Axversion;
  104. extern int Axi_sock,Ax25mbox;
  105.  
  106. #define    NHASH    17
  107.  
  108. /* In lapb.c: */
  109. void est_link __ARGS((struct ax25_cb *axp));
  110. void lapbstate __ARGS((struct ax25_cb *axp,int s));
  111. int lapb_input __ARGS((struct ax25_cb *axp,char cmdrsp,struct mbuf *bp));
  112. int lapb_output __ARGS((struct ax25_cb *axp));
  113. struct mbuf *segmenter __ARGS((struct mbuf *bp,int16 ssize));
  114. int sendctl __ARGS((struct ax25_cb *axp,char cmdrsp,char cmd));
  115.  
  116. /* In lapbtimer.c: */
  117. void pollthem __ARGS((void *p));
  118. void recover __ARGS((void *p));
  119.  
  120. /* In ax25subr.c: */
  121. int16 ftype __ARGS((char control));
  122.  
  123. #endif    /* I */
  124.  
  125.  
  126.